package fr.enssat.embeddedsoft.projet.fgourvel.spotrin.bluetooth;

import java.io.IOException;

import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.util.Log;


/********************************************************************
 * AcceptThread --> Thread Serveur :
 *                  acceptation d'une demande de connexion distante
 *********************************************************************/


public class AcceptThread extends Thread {
        
        private static String TAG = "AcceptThread";
        private BluetoothService service;
        private BluetoothServerSocket socketServeur;
        
        
        /*********************************************************
        /*                       CONSTRUCTEUR
         *********************************************************/
       
        public AcceptThread(BluetoothService service){
                this.service = service;
                
                try{    // tentative de Création de la socket serveur
                        socketServeur = service.getAdapter().listenUsingRfcommWithServiceRecord(
                                        "Sumomo", BluetoothService.APP_UUID);
                } catch (IOException e) {
                        Log.e(TAG,"Bluetooth : echec création socket serveur",e);
                }
        }
        
        /*********************************************************
        /*                       TRAITEMENT
         *********************************************************/
        
		public void run(){
		        BluetoothSocket socket = null;
		        
		        // Tant que non connecté
		        while(service.getState() != BluetoothService.ETAT_CONNECTE){
		                try{
		                        socket = socketServeur.accept();
		                        
		                } catch (IOException e) {
		                        Log.e(TAG,"Bluetooth : la connexion a échoué",e);
		                }
		                
		                // Si la connexion a été acceptée
		                if(socket != null){
		                        synchronized(service){
		                                switch (service.getState()) {
		                                case BluetoothService.ETAT_ECOUTE:
		                                case BluetoothService.ETAT_CONNEXION:
		                                	 //on lance le thread qui gère les connexions
		                                        service.connected(socket, socket.getRemoteDevice());
		                                        break;
		                                case BluetoothService.ETAT_NUL:
		                                case BluetoothService.ETAT_CONNECTE:
		                                        
		                                        try {
		                                                socket.close();
		                                        } catch (IOException e) {
		                                                Log.e(TAG,"Bluetooth : echec socket.close()",e);
		                                        }
		                                        break;
		                                }
		                        }
		                }
		        }
		}
        
        /*********************************************************
        /*                       ARRET DU THREAD
         *********************************************************/

        public void cancel(){
                // On ferme la socket serveur
                try {
                        socketServeur.close();
                } catch (IOException e) {
                        Log.e(TAG,"Bluetooth : la fermeture de la socket serveur a échoué",e);
                }
        }
        
}
